
let  InterpretStatus =  {
    NotStarted:0,
    Running:1,
    Stopped:2
}
//操作机器的一个工具或者说服务或者说解释器
class Interpret{
    constructor(machine){
        this.machine=machine;
        this.listeners = new Set();//监听函数,当状态发生改变的时候执行的函数
        this.status = InterpretStatus.NotStarted;//机器默认运行状态是未启动
        this.state = machine.states[machine.initial];//close的StateNode
    }
    start=()=>{
        //如果未启动是不接收指令，启动之后才可以接收指令
        this.status = InterpretStatus.Running;//让机器启动起来
        return this;
    }
    send=(event)=>{//{type:'CLICK'}
       //把这个 event传给close的stateNode,它会知道应该如何进行状态转换
       this.state = this.state.next(event);//返回open StateNode
       this.listeners.forEach(l=>l(this.state));
       return this;
    }
    onTransition=(listener)=>{//注册状态变化的监听函数
        this.listeners.add(listener);
        return this;
    }
}
function interpret(machine){
  return new Interpret(machine);
}

export default interpret;